package zsc.ruanc.practicaltraining.service;

import com.github.pagehelper.PageInfo;
import org.springframework.web.multipart.MultipartFile;
import zsc.ruanc.practicaltraining.model.domain.TUser;
import zsc.ruanc.practicaltraining.model.vo.SelectConditionVo;
import zsc.ruanc.practicaltraining.model.vo.UserVo;
import zsc.ruanc.practicaltraining.model.vo.createUserVo;

import java.io.IOException;
import java.util.List;
import java.util.Map;

/**
 * 用户操作模块
 */
public interface UserService {

    /**
     * 创建用户
     * @param createUserVo
     * @return 返回用户id
     */
    public int createUser(createUserVo createUserVo);

    /**
     * 修改密码
     * @param email
     * @param password
     * @return
     */
    public boolean updatePassword(String email, String password);

    /**
     * 修改密码
     * @param id
     * @param oldPassword
     * @param newPassword
     * @return
     */
    public boolean updatePassword(int id, String oldPassword, String newPassword);

    /**
     * 登录
     * @param meail
     * @param password
     * @return 返回token
     */
    public String login(String meail, String password);

    /**
     * 修改用户名
     * @param name
     * @return
     */
    public boolean updateName(int id, String name);

    /**
     * 修改邮箱
     * @param email
     * @return
     */
    public boolean updateEmail(int id, String email);

    /**
     * 修改头像
     * @param file
     * @return
     */
    public boolean updateHead(int id, MultipartFile file);

    /**
     * 修改一些无关紧要的信息 性别、生日。。。
     * @param userVo
     * @return
     */
    public boolean updateInfo(UserVo userVo);

    /**
     * 获得用户信息
     * @param id
     * @return
     */
    public TUser getUser(int id);

    /**
     * 一个用户查询另一个用户
     * @param username
     * @return
     */
    public TUser getUserInfo(String username);

    /**
     * 刷新token
     * @param id
     * @return
     */
    public String refreshToken(int id);

    /**
     * 退出
     * @param id
     * @return
     */
    public boolean logout(int id);


    //********************************************************
    //              管理员权限
    //********************************************************

    /**
     * 按条件查询用户
     * @param id
     * @param email
     * @return
     */
    public TUser select(Integer id, String email);

    /**
     * 分页查询
     * @param cur
     * @param size
     * @return
     */
    public Map selectPage(int cur, int size, String text);

    /**
     * 封号激活
     * @param id
     * @param flag
     * @return
     */
    public boolean setValid(int id, boolean flag);


    /**
     *  把用户升级成管理员或者降为普通用户
     * @param userId 目标id
     * @param role  1:管理员 2：普通用户
     * @return
     */
    public boolean updateRole(int userId, int role);


}
